home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / ldapjdk.jar / netscape / ldap / LDAPAttribute.class (.txt) next >
Encoding:
Java Class File  |  1999-04-13  |  4.5 KB  |  341 lines

  1. package netscape.ldap;
  2.  
  3. import java.io.IOException;
  4. import java.util.Enumeration;
  5. import java.util.StringTokenizer;
  6. import java.util.Vector;
  7. import netscape.ldap.ber.stream.BERConstruct;
  8. import netscape.ldap.ber.stream.BERElement;
  9. import netscape.ldap.ber.stream.BEROctetString;
  10. import netscape.ldap.ber.stream.BERSequence;
  11. import netscape.ldap.ber.stream.BERSet;
  12.  
  13. public class LDAPAttribute {
  14.    private String name;
  15.    private byte[] nameBuf;
  16.    private Object[] values = new Object[0];
  17.  
  18.    public LDAPAttribute(LDAPAttribute var1) {
  19.       this.name = var1.name;
  20.       this.nameBuf = var1.nameBuf;
  21.       this.values = new Object[var1.values.length];
  22.  
  23.       for(int var2 = 0; var2 < var1.values.length; ++var2) {
  24.          this.values[var2] = new byte[((byte[])var1.values[var2]).length];
  25.          System.arraycopy((byte[])var1.values[var2], 0, (byte[])this.values[var2], 0, ((byte[])var1.values[var2]).length);
  26.       }
  27.  
  28.    }
  29.  
  30.    public LDAPAttribute(String var1) {
  31.       this.name = var1;
  32.    }
  33.  
  34.    public LDAPAttribute(String var1, byte[] var2) {
  35.       this.name = var1;
  36.       this.addValue(var2);
  37.    }
  38.  
  39.    public LDAPAttribute(String var1, String var2) {
  40.       this.name = var1;
  41.       this.addValue(var2);
  42.    }
  43.  
  44.    public LDAPAttribute(String var1, String[] var2) {
  45.       this.name = var1;
  46.       if (var2 != null) {
  47.          this.setValues(var2);
  48.       }
  49.  
  50.    }
  51.  
  52.    public LDAPAttribute(BERElement var1) throws IOException {
  53.       BERSequence var2 = (BERSequence)var1;
  54.       BEROctetString var3 = (BEROctetString)((BERConstruct)var2).elementAt(0);
  55.       this.nameBuf = var3.getValue();
  56.       BERSet var4 = (BERSet)((BERConstruct)var2).elementAt(1);
  57.       if (((BERConstruct)var4).size() > 0) {
  58.          Object[] var5 = new Object[((BERConstruct)var4).size()];
  59.  
  60.          for(int var6 = 0; var6 < ((BERConstruct)var4).size(); ++var6) {
  61.             var5[var6] = ((BEROctetString)((BERConstruct)var4).elementAt(var6)).getValue();
  62.          }
  63.  
  64.          this.setValues(var5);
  65.       }
  66.  
  67.    }
  68.  
  69.    public int size() {
  70.       return this.values.length;
  71.    }
  72.  
  73.    public Enumeration getStringValues() {
  74.       Vector var1 = new Vector();
  75.       synchronized(this){}
  76.  
  77.       Object var2;
  78.       try {
  79.          try {
  80.             for(int var5 = 0; var5 < this.values.length; ++var5) {
  81.                if (this.values[var5] != null) {
  82.                   var1.addElement(new String((byte[])this.values[var5], "UTF8"));
  83.                } else {
  84.                   var1.addElement(new String(""));
  85.                }
  86.             }
  87.  
  88.             return var1.elements();
  89.          } catch (Exception var8) {
  90.             var2 = null;
  91.          }
  92.       } catch (Throwable var9) {
  93.          throw var9;
  94.       }
  95.  
  96.       return (Enumeration)var2;
  97.    }
  98.  
  99.    public Enumeration getByteValues() {
  100.       Vector var1 = new Vector();
  101.       synchronized(this){}
  102.  
  103.       try {
  104.          for(int var4 = 0; var4 < this.values.length; ++var4) {
  105.             if (this.values[var4] != null) {
  106.                var1.addElement(this.values[var4]);
  107.             } else {
  108.                var1.addElement(new byte[0]);
  109.             }
  110.          }
  111.       } catch (Throwable var6) {
  112.          throw var6;
  113.       }
  114.  
  115.       return var1.elements();
  116.    }
  117.  
  118.    public String getName() {
  119.       if (this.name == null && this.nameBuf != null) {
  120.          try {
  121.             this.name = new String(this.nameBuf, "UTF8");
  122.          } catch (Throwable var1) {
  123.          }
  124.       }
  125.  
  126.       return this.name;
  127.    }
  128.  
  129.    public static String[] getSubtypes(String var0) {
  130.       StringTokenizer var1 = new StringTokenizer(var0, ";");
  131.       if (!var1.hasMoreElements()) {
  132.          return null;
  133.       } else {
  134.          var1.nextElement();
  135.          String[] var2 = new String[var1.countTokens()];
  136.  
  137.          for(int var3 = 0; var1.hasMoreElements(); var2[var3++] = (String)var1.nextElement()) {
  138.          }
  139.  
  140.          return var2;
  141.       }
  142.    }
  143.  
  144.    public String[] getSubtypes() {
  145.       return getSubtypes(this.getName());
  146.    }
  147.  
  148.    public String getLangSubtype() {
  149.       String[] var1 = this.getSubtypes();
  150.       if (var1 != null) {
  151.          for(int var2 = 0; var2 < var1.length; ++var2) {
  152.             if (var1[var2].length() >= 5 && var1[var2].substring(0, 5).equalsIgnoreCase("lang-")) {
  153.                return var1[var2];
  154.             }
  155.          }
  156.       }
  157.  
  158.       return null;
  159.    }
  160.  
  161.    public static String getBaseName(String var0) {
  162.       String var1 = var0;
  163.       StringTokenizer var2 = new StringTokenizer(var0, ";");
  164.       if (var2.hasMoreElements()) {
  165.          var1 = (String)var2.nextElement();
  166.       }
  167.  
  168.       return var1;
  169.    }
  170.  
  171.    public String getBaseName() {
  172.       return getBaseName(this.getName());
  173.    }
  174.  
  175.    public boolean hasSubtype(String var1) {
  176.       String[] var2 = this.getSubtypes();
  177.  
  178.       for(int var3 = 0; var3 < var2.length; ++var3) {
  179.          if (var1.equalsIgnoreCase(var2[var3])) {
  180.             return true;
  181.          }
  182.       }
  183.  
  184.       return false;
  185.    }
  186.  
  187.    public boolean hasSubtypes(String[] var1) {
  188.       for(int var2 = 0; var2 < var1.length; ++var2) {
  189.          if (!this.hasSubtype(var1[var2])) {
  190.             return false;
  191.          }
  192.       }
  193.  
  194.       return true;
  195.    }
  196.  
  197.    public synchronized void addValue(String var1) {
  198.       if (var1 != null) {
  199.          try {
  200.             byte[] var2 = var1.getBytes("UTF8");
  201.             this.addValue(var2);
  202.          } catch (Throwable var3) {
  203.          }
  204.       }
  205.    }
  206.  
  207.    protected void setValues(String[] var1) {
  208.       Object[] var2;
  209.       if (var1 != null) {
  210.          var2 = new Object[var1.length];
  211.  
  212.          for(int var3 = 0; var3 < var2.length; ++var3) {
  213.             try {
  214.                var2[var3] = var1[var3].getBytes("UTF8");
  215.             } catch (Throwable var4) {
  216.                var2[var3] = new byte[0];
  217.             }
  218.          }
  219.       } else {
  220.          var2 = new Object[0];
  221.       }
  222.  
  223.       this.setValues(var2);
  224.    }
  225.  
  226.    public synchronized void addValue(byte[] var1) {
  227.       if (var1 != null) {
  228.          Object[] var2 = new Object[this.values.length + 1];
  229.  
  230.          for(int var3 = 0; var3 < this.values.length; ++var3) {
  231.             var2[var3] = this.values[var3];
  232.          }
  233.  
  234.          var2[this.values.length] = var1;
  235.          this.values = var2;
  236.       }
  237.  
  238.    }
  239.  
  240.    protected synchronized void setValues(Object[] var1) {
  241.       this.values = var1;
  242.    }
  243.  
  244.    public synchronized void removeValue(String var1) {
  245.       if (var1 != null) {
  246.          try {
  247.             byte[] var2 = var1.getBytes("UTF8");
  248.             this.removeValue(var2);
  249.          } catch (Throwable var3) {
  250.          }
  251.       }
  252.    }
  253.  
  254.    public synchronized void removeValue(byte[] var1) {
  255.       if (var1 != null && this.values != null && this.values.length >= 1) {
  256.          int var2 = -1;
  257.  
  258.          for(int var3 = 0; var3 < this.values.length; ++var3) {
  259.             if (equalValue(var1, (byte[])this.values[var3])) {
  260.                var2 = var3;
  261.                break;
  262.             }
  263.          }
  264.  
  265.          if (var2 >= 0) {
  266.             Object[] var4 = new Object[this.values.length - 1];
  267.             int var5 = 0;
  268.  
  269.             for(int var6 = 0; var6 < this.values.length; ++var6) {
  270.                if (var6 != var2) {
  271.                   var4[var5++] = this.values[var6];
  272.                }
  273.             }
  274.  
  275.             this.values = var4;
  276.          }
  277.  
  278.       }
  279.    }
  280.  
  281.    private static boolean equalValue(byte[] var0, byte[] var1) {
  282.       if (var0.length != var1.length) {
  283.          return false;
  284.       } else {
  285.          for(int var2 = 0; var2 < var0.length; ++var2) {
  286.             if (var0[var2] != var1[var2]) {
  287.                return false;
  288.             }
  289.          }
  290.  
  291.          return true;
  292.       }
  293.    }
  294.  
  295.    public BERElement getBERElement() {
  296.       try {
  297.          BERSequence var1 = new BERSequence();
  298.          ((BERConstruct)var1).addElement(new BEROctetString(this.getName()));
  299.          BERSet var2 = new BERSet();
  300.  
  301.          for(int var3 = 0; var3 < this.values.length; ++var3) {
  302.             ((BERConstruct)var2).addElement(new BEROctetString((byte[])this.values[var3]));
  303.          }
  304.  
  305.          ((BERConstruct)var1).addElement(var2);
  306.          return var1;
  307.       } catch (IOException var4) {
  308.          return null;
  309.       }
  310.    }
  311.  
  312.    private String getParamString() {
  313.       String var1 = "";
  314.       if (this.values.length > 0) {
  315.          for(int var2 = 0; var2 < this.values.length; ++var2) {
  316.             if (var2 != 0) {
  317.                var1 = var1 + ",";
  318.             }
  319.  
  320.             byte[] var3 = (byte[])this.values[var2];
  321.  
  322.             try {
  323.                var1 = var1 + new String(var3, "UTF8");
  324.             } catch (Exception var4) {
  325.                if (var3 != null) {
  326.                   var1 = var1 + var3.length + " bytes";
  327.                } else {
  328.                   var1 = var1 + "null value";
  329.                }
  330.             }
  331.          }
  332.       }
  333.  
  334.       return "{type='" + this.getName() + "', values='" + var1 + "'}";
  335.    }
  336.  
  337.    public String toString() {
  338.       return "LDAPAttribute " + this.getParamString();
  339.    }
  340. }
  341.